pub mod handler {
    use std::fs;
    use std::io::ErrorKind;

    pub struct Config {
        pub word_search: String,
        pub file_search: String
    }

    impl Config {
        pub fn new(args: &[String]) -> Result<Config, String> {
            if args.len() == 3 {
                let search = args[1].clone();
                let file = args[2].clone();
                println!("Поиск значения: '{}'", search);
                println!("В файле: '{}'\n", file);

                Ok(Config {
                    word_search: search,
                    file_search: file,
                })
            } else {
                return Err("Недостаточно аргументов!".to_string())
            }
        }
    }

    pub fn read_content(conf: &Config) -> String {
        let res = match fs::read_to_string(conf.file_search.clone()) {
            Ok(cont) => cont,
            Err(error) => match error.kind() {
                ErrorKind::NotFound => panic!("Файл не найден!"),
                ErrorKind::PermissionDenied => panic!("Нет прав для чтения файла!"),
                _ => panic!("Неизвестная ошибка")
            }
        };
        return res
    }

    pub fn search(query: String, file_content: String) {
        let mut counter: u16 = 0;

        for line in file_content.lines() {
            if line.to_lowercase().contains(query.to_lowercase().as_str()) {
                println!("Строка: {} | {}", counter + 1, line);
                counter += 1;
            }
        }
        println!("\nВсего совпадений: {}", counter);
    }
}